public class SetMatrixZeroes {
    /**
     * 给定一个 m x n 的矩阵，如果一个元素为 0 ，则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。
     * 要求 原地算法：空间复杂度为常数
     * @param matrix
     */
    public void setZeroes(int[][] matrix) {
        int row_len = matrix.length;
        int col_len = matrix[0].length;
        boolean row_flag = false;
        boolean col_flag = false;
        for (int i=0;i<row_len;i++){
            if (matrix[i][0]==0)
                row_flag = true;
        }

        for (int j=0;j<col_len;j++){
            if (matrix[0][j]==0)
                col_flag = true;
        }

        for (int i=1;i<row_len;i++)
            for (int j=1;j<col_len;j++){
                if (matrix[i][j]==0){
                    matrix[i][0] = matrix[0][j] =0;
                }
            }
        for (int i=1;i<row_len;i++)
            for (int j=1;j<col_len;j++){
                if (matrix[i][0]==0||matrix[0][j]==0)
                    matrix[i][j]=0;
            }
        if (row_flag){
            for (int i=0;i<row_len;i++){
                matrix[i][0] = 0;
            }
        }
        if (col_flag){
            for (int j=0;j<col_len;j++){
                matrix[0][j] =0;
            }
        }
    }
}
